﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;
using Custom;

namespace BizkaibusMobilePro
{
    public partial class frmDetalleLinea : Form
    {
        public frmDetalleLinea()
        {
            InitializeComponent();
        }

        bizbus.TQ service = new BizkaibusMobilePro.bizbus.TQ();

        string _linea;
        XmlNode _favLinea;
        XmlDocument _favoritos;
        Dictionary<string, XmlNode> _infoParadas;

        public void ShowDetail(XmlNode linea, Dictionary<string,XmlNode> infoParadas,XmlDocument favoritos)
        {
            _favLinea = linea;
            _favoritos = favoritos;
            _infoParadas = infoParadas;

            lblId.Text = linea.Attributes["LN_CLINEA"].Value;
            lblNombre.Text = linea.Attributes["RL_DENOMI"].Value;

            _linea = linea.Attributes["LN_CLINEA"].Value;

            if (_favoritos.SelectSingleNode("//lineas/Registro[@LN_CLINEA='" + _favLinea.Attributes["LN_CLINEA"].Value + "'][@IR_NMRORU='" + _favLinea.Attributes["IR_NMRORU"].Value + "']") != null)
            {
                picAddFavorites.Visible = false;
            }

            this.ShowDialog();
        }

        private void mnuAtras_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void menuItem2_Click(object sender, EventArgs e)
        {
            if (lstParadas.FocusedItem != null)
            {
                frmProximasLlegadas llegadas = new frmProximasLlegadas();
                llegadas.ShowDetail(_linea, lstParadas.FocusedItem.Tag.ToString(),_favoritos);
            }
            else
            {
                MessageBox.Show("Selecciona una parada para ver la información de las proximas llegadas.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void menuItem3_Click(object sender, EventArgs e)
        {
            if (lstParadas.FocusedItem != null)
            {
                frmProximasLlegadas llegadas = new frmProximasLlegadas();
                llegadas.ShowDetail("*", lstParadas.FocusedItem.Tag.ToString(),_favoritos);
            }
            else
            {
                MessageBox.Show("Selecciona una parada para ver la información de las proximas llegadas.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void picAddFavorites_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Añadir esta linea a tus favoritos?", "Favoritos", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
            {
                XmlTextReader xmlReader = new XmlTextReader(new StringReader(_favLinea.OuterXml));
                _favoritos.SelectSingleNode("//lineas").AppendChild(_favoritos.ReadNode(xmlReader));
                MessageBox.Show("Linea añadida.", "OK", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
                picAddFavorites.Visible = false;
            }
        }

        private void frmDetalleLinea_Load(object sender, EventArgs e)
        {
            //Horarios
            this.Show();
            string horarios = "";
            try
            {
                helper.FormDisable(this, "Cargando horarios...");
                horarios = service.gfReturn_Buscar_TextoHorarioLinea(_favLinea.Attributes["LN_CLINEA"].Value, _favLinea.Attributes["IR_NMRORU"].Value);
            }
            catch
            {
            }
            finally
            {
                helper.FormEnable(this);
            }
            string[] xmlHorarios = horarios.Split('®');

            if (xmlHorarios.Length <= 1)
            {
                txtHorarios.Text = "No se ha podido cargar el horario de esta linea.";
                this.ShowDialog();
                return;
            }

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xmlHorarios[1]);
            XmlNode horario = doc.SelectNodes("//Registro")[0];
            txtHorarios.Text = string.Format("{0}\n\n\r{1}", horario.Attributes["HT_TEXTOIDA"].Value, horario.Attributes["HT_TEXTOVUE"].Value);
            txtHorarios.Text = txtHorarios.Text.Replace("{vbNewLine}", "\n");
            txtHorarios.Text = txtHorarios.Text.Replace("\n", Environment.NewLine);

            //Paradas
            string paradas = "";
            try
            {
                helper.FormDisable(this, "Buscando paradas...");
                paradas = service.gfReturn_Consultar_ParadasGraficasporLinea(2, _favLinea.Attributes["LN_CLINEA"].Value, _favLinea.Attributes["IR_NMRORU"].Value, _favLinea.Attributes["IR_SENTDO"].Value);
            }
            catch
            {
            }
            finally
            {
                helper.FormEnable(this);
            }

            string[] xmlParadas = paradas.Split('®');

            if (paradas.Length <= 1)
            {
                MessageBox.Show("No se ha podido cargar el listado de paradas de esta linea.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                this.ShowDialog();
                return;
            }

            doc = new XmlDocument();
            doc.LoadXml(xmlParadas[1]);

            ListViewItem newItem;
            lstParadas.Items.Clear();
            string sid = "";

            XmlNode extendedInfo = null;

            foreach (XmlNode parada in doc.SelectNodes(string.Format("//Registro[@IR_NMRORU='{0}']", _favLinea.Attributes["IR_NMRORU"].Value)))
            {
                newItem = new ListViewItem();
                sid = parada.Attributes["PROVINCIA"].Value + parada.Attributes["MUNICIPIO"].Value + parada.Attributes["PARADA"].Value;

                if (_infoParadas.ContainsKey(sid))
                {
                    extendedInfo = _infoParadas[sid];
                    newItem.Text = extendedInfo.Attributes["DescripcionMunicipio"].Value;
                    newItem.SubItems.Add(extendedInfo.Attributes["DENOMINACION"].Value);
                }
                else
                {
                    newItem.Text = "------";
                    newItem.SubItems.Add("Sin información sobre esta parada");
                }

                newItem.Tag = sid;
                lstParadas.Items.Add(newItem);
            }

            helper.ColumnsAutoSize(lstParadas.Columns);
        }

    }
}